package com.geaosu.firstlineofcode.utils

import android.content.Context
import android.graphics.Typeface
import android.widget.TextView
import java.io.InputStream

class AssetsUtils {

    /**
     * des: 将Assets目录下的文本文件转换成String字符串
     * @param context 上写文
     * @param fileName 文件名称, 包含文件格式后缀 (例如: "乔布斯传.txt" 或者 "小说目录/乔布斯传.txt")
     * @return String字符串
     */
    fun getStringFormAssetsFile(context: Context, fileName: String): String {
        try {
            val ins: InputStream = context.assets.open(fileName)
            val size: Int = ins.available()
            val buffer: ByteArray = ByteArray(size)
            ins.read(buffer)
            ins.close()
            val str: String = String(buffer)// 这里需要 String(buffer,"utf-8" )
            return str
        } catch (e: Exception) {
            e.printStackTrace()
            return ""
        }
    }

    /**
     * des: 将Assets目录下的文本文件转换成String字符串
     * @param context 上写文
     * @param fileName 文件名称, 包含文件格式后缀 (例如: "乔布斯传.txt" 或者 "小说目录/乔布斯传.txt")
     * @return String字符串
     */
    fun getStringFormAssetsFileInto(context: Context, fileName: String, textView: TextView) {
        try {
            val ins: InputStream = context.assets.open(fileName)
            val size: Int = ins.available()
            val buffer: ByteArray = ByteArray(size)
            ins.read(buffer)
            ins.close()
            val str: String = String(buffer)// 这里需要 String(buffer,"utf-8" )
            textView.setText(str)
        } catch (e: Exception) {
            e.printStackTrace()
            textView.setText("加载文件出错!!!")
        }
    }

    /**
     * des: 将Assets目录下的txt文件转换成String字符串
     * @param context 上写文
     * @param fileName 文件名称, 不包含文件格式后缀 (例如: "乔布斯传" 或者 "小说目录/乔布斯传")
     * @return String字符串
     */
    fun getStringFormAssetsTxtFile(context: Context, fileName: String): String {
        try {
            val ins: InputStream = context.assets.open("$fileName.txt")
            val size: Int = ins.available()
            val buffer: ByteArray = ByteArray(size)
            ins.read(buffer)
            ins.close()
            val str: String = String(buffer)// todo 这里需要 String(buffer,"utf-8" )
            return str
        } catch (e: Exception) {
            e.printStackTrace()
            return ""
        }
    }

    /**
     * des: 将Assets目录下的md文件转换成String字符串
     * @param context 上写文
     * @param fileName 文件名称, 不包含文件格式后缀 (例如: "乔布斯传" 或者 "md目录/乔布斯传")
     * @return String字符串
     */
    fun getStringFormAssetsMdFile(context: Context, fileName: String): String {
        try {
            val ins: InputStream = context.assets.open("$fileName.md")
            val size: Int = ins.available()
            val buffer: ByteArray = ByteArray(size)
            ins.read(buffer)
            ins.close()
            // todo 这里需要 String(buffer,"utf-8" )
            val str: String = String(buffer)
            return str
        } catch (e: Exception) {
            e.printStackTrace()
            return ""
        }
    }

    /**
     * des: 加载Assets目录下的字体文件
     * @param context 上写文
     * @param fileName 文件名称, 包含文件格式后缀(例如: "fonts/微软雅黑.ttf" 或者 "fonts/微软雅黑.ttf")
     * @return 字体的Typeface对象实例
     */
    fun getTypefaceFormAssets(context: Context, fileName: String): Typeface {
        val tf: Typeface = Typeface.createFromAsset(context.assets, fileName)
        return tf
    }

    /**
     * des: 加载Assets目录下的字体文件, 并设置给TextView
     * @param context 上写文
     * @param fileName 文件名称, 包含文件格式后缀(例如: "fonts/微软雅黑.ttf" 或者 "fonts/微软雅黑.ttf")
     * @param textView TextView
     */
    fun getTypefaceFormAssetsTtfFileInto(context: Context, fileName: String, textView: TextView) {
        val tf: Typeface = Typeface.createFromAsset(context.assets, fileName)
        textView.setTypeface(tf)
    }

    /**
     * des: 加载Assets目录下的字体文件
     * @param context 上写文
     * @param fileName 文件名称, 包含文件格式后缀(例如: "fonts/微软雅黑" 或者 "fonts/微软雅黑")
     * @return 字体的Typeface对象实例
     */
    fun getTypefaceFormAssetsTtfFile(context: Context, fileName: String): Typeface {
        val tf: Typeface = Typeface.createFromAsset(context.assets, "$fileName.ttf")
        return tf
    }
}